home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / ftpglob.nasl < prev    next >
Text File  |  2005-03-31  |  6KB  |  244 lines

  1. #
  2. # This script is copyright ⌐ 2001 by EMAZE Networks S.p.A. 
  3. # under the General Public License (GPL). All Rights Reserved.
  4. # changes by rd: added risk factor & fix
  5.  
  6. bracket = raw_string(0x7B);
  7.  
  8. if (description)
  9. {
  10.      script_id(10821);
  11.      script_bugtraq_id(2550, 3581);
  12.     script_cve_id("CAN-2001-0249", "CVE-2001-0550");
  13.       script_version("$Revision: 1.21 $");
  14.      name["english"] = "FTPD glob Heap Corruption";
  15.     script_name(english: name["english"]);
  16.  
  17.      desc["english"] = "
  18. The FTPD glob vulnerability manifests itself in handling of the glob command. 
  19. The problem is not a typical buffer overflow or format string vulnerability, 
  20. but a combination of two bugs: an implementation of the glob command that does not
  21.  properly return an error condition when interpreting the string ~" + bracket + ",
  22. and then frees memory which may contain user supplied data. This 
  23. vulnerability is potentially exploitable by any user who is able to log in to 
  24. a vulnerable server, including users with anonymous access. If successful, an 
  25. attacker may be able to execute arbitrary code with the privileges of FTPD, 
  26. typically root.
  27.  
  28. Solution : Contact your vendor for a fix
  29. Risk factor : High";
  30.  
  31.      script_description(english: desc["english"]);
  32.      script_summary(english: "Check if the remote FTPD s vulnerable to a glob heap corruption vulnerability");
  33.  
  34.      script_category(ACT_MIXED_ATTACK); 
  35.      script_family(english: "FTP");
  36.  
  37.      script_copyright(english: "Copyright (C) 2001 E*Maze");
  38.  
  39.      script_dependencie("find_service.nes", "ftp_anonymous.nasl", "os_fingerprint.nasl");
  40.      script_require_ports("Services/ftp", 21);
  41.  
  42.      exit(0);
  43. }
  44.  
  45.  
  46. #
  47. # Script code starts here 
  48. #
  49.  
  50. include("ftp_func.inc");
  51.  
  52. port = get_kb_item("Services/ftp");
  53. if (!port)
  54.     port = 21;
  55.  
  56. if (!get_port_state(port))
  57.     exit(0);
  58.  
  59.  
  60.  
  61. login = get_kb_item("ftp/login");
  62. password = get_kb_item("ftp/password");
  63.  
  64. if(safe_checks())login = 0;
  65.  
  66.  
  67. if (login)
  68. {
  69.     soc = open_sock_tcp(port);
  70.     if (!soc)
  71.         exit(0);
  72.  
  73.     if (ftp_log_in(socket:soc, user:login, pass:password))
  74.     {
  75.          c = string("CWD ~", bracket, "\r\n");
  76.              d = string("CWD ~*", bracket, "\r\n");
  77.             
  78.         send(socket:soc, data:c);
  79.              b = ftp_recv_line(socket:soc);
  80.  
  81.          send(socket:soc, data:d);
  82.         e = ftp_recv_line(socket:soc);
  83.  
  84.         #
  85.         # Buggy version. no known exploits
  86.         #
  87.         
  88.         buggy = string(
  89.         "You seem to be running an FTP server which is vulnerable to the 'glob heap corruption'\n",
  90.         "flaw, but which can not be exploited on this server.\n",
  91.         "Solution: Upgrade your ftp server software to the latest version.\n",
  92.         "Risk factor : Medium\n");
  93.  
  94.         
  95.  
  96.         #
  97.         # Vulnerable version. Working exploit has been written
  98.         #
  99.         vuln = string(
  100.         "You seem to be running an FTP server which is vulnerable to the 'glob heap corruption'\n",
  101.         "flaw, which is known to be exploitable remotely against this server. An attacker may use \n",
  102.         "this flaw to execute arbitrary commands on this host.\n\n",
  103.         "Solution: Upgrade your ftp server software to the latest version.\n",
  104.         "Risk factor : High\n");
  105.  
  106.             
  107.         #
  108.         # Check if the connetcion is lost
  109.         # if it is, the daemon is vulnerable
  110.         # linux/bsd: wuftpd, beroftpd
  111.         # solaris ftpd
  112.         #
  113.  
  114.         if ((!b) || (!e))
  115.         {
  116.             security_hole(port:port, data:vuln); 
  117.             exit(0);
  118.         }
  119.  
  120.         #
  121.         # Freebsd / Openbsd command successfull. 
  122.         # buggy version
  123.         #
  124.         if ((b >< "250 CWD command successful") ||
  125.             (e >< "250 CWD command successful"))
  126.         {
  127.                security_hole(port:port, data:buggy); 
  128.             exit(0);
  129.         }
  130.                 
  131.         #    
  132.         # Netbsd vulnerable
  133.         #
  134.         if((b >< ":") || (e >< ":"))
  135.         {
  136.             security_hole(port:port, data:vuln);
  137.             exit(0);
  138.         }
  139.  
  140.         #
  141.         # Aix buggy
  142.         #
  143.         if ((b >< "550 Unknown user name after ~") ||
  144.             (e >< "550 Unknown user name after ~"))
  145.         {
  146.             security_hole(port:port, data:buggy);
  147.             exit(0);
  148.         }
  149.  
  150.         #
  151.         # MacOS X Darwin buggy
  152.         #
  153.         if ((b >< "550 ~: No such file or directory") ||
  154.             (e >< "550 ~: No such file or directory"))
  155.         {
  156.                security_hole(port:port, data:buggy);
  157.             exit(0);
  158.         }
  159.  
  160.         #
  161.         # The non vulnerable version
  162.         #
  163.              ftp_close(socket:soc);
  164.  
  165.         exit(0);
  166.     }
  167.  
  168.     ftp_close(socket: soc);
  169. }
  170.  
  171.  
  172.  
  173.  
  174. os = get_kb_item("Host/OS/icmp");
  175. if(os)
  176. {
  177.  if(egrep(pattern:".*FreeBSD (4\.[5-9]|5\..*).*", string:os))exit(0);
  178. }
  179.  
  180.  
  181.  
  182.  
  183. #          
  184. # We weren't able to login into the ftp server.
  185. # check the banner instead
  186. #
  187. banner = get_ftp_banner(port: port);
  188.  
  189. if (!banner)
  190.     exit(0);
  191.  
  192. #
  193. # FTP server 4.1 (aix/ultrix), 1.1. (hp-ux), 6.00 (darwin), 6.00LS (freebsd)
  194. #
  195.  
  196. # wu-ftpd 2.6.1-20 is not vulnerable
  197. if(egrep(pattern:".*wu-2\.6\.1-[2-9][0-9].*", string:banner))exit(0);
  198.  
  199.  
  200. if ( "PHNE_27765" >< banner ||
  201.      "PHNE_29461" >< banner ||
  202.      "PHNE_30432" >< banner ||
  203.      "PHNE_31931" >< banner ||
  204.      "PHNE_30990" >< banner ) exit(0);
  205.  
  206. if (
  207.     egrep(pattern: 
  208.         ".*wu-([0-1]|(2\.([0-5][^0-9]|6\.[0-1]))).*", 
  209.     string:banner) ||
  210.     egrep(pattern: 
  211.         ".*BeroFTPD.*", 
  212.     string:banner) ||
  213.     egrep(pattern: 
  214.         ".*NetBSD-ftpd (199[0-9]|200[0-1]).*", 
  215.     string:banner) ||
  216.     egrep(pattern: 
  217.         ".*Digital UNIX Version [0-5]\..*", 
  218.     string:banner) ||
  219.     egrep(pattern: 
  220.         ".*SunOS [0-5]\.[0-8].*", 
  221.     string:banner) ||
  222.     egrep(pattern: 
  223.         ".*FTP server.*Version (1\.[0-1]\.|4\.1|6\.00|6\.00LS).*",
  224.     string:banner)    ||
  225.     egrep(pattern:
  226.         ".*FTP server .SRPftp 1\.[0-3].*", 
  227.           string:banner)) 
  228.     {
  229.     banvuln = string(
  230.         "You seem to be running an FTP server which is vulnerable to the\n",
  231.         "'glob heap corruption' flaw.\n",
  232.         "An attacker may use this problem to execute arbitrary commands on this host.\n\n",
  233.         "*** Nessus relied solely on the banner of the server to issue this warning,\n",
  234.         "*** so this alert might be a false positive\n",
  235.         "*** NOTE: must have a valid username/password to fully check this vulnerability\n\n",
  236.         "Solution : Upgrade your ftp server software to the latest version.\n",
  237.         "Risk factor : High\n");
  238.  
  239.     security_hole(port:port, data:banvuln); 
  240.     exit(0);
  241. }
  242.  
  243.